Java Technologies @Mapper(componentModel = "cdi") এর ব্যবহার গাইড ও নোট

267

MapStruct একটি কোড জেনারেটর যা Java Beans (POJOs) এবং ডেটা ট্রান্সফার অবজেক্ট (DTO) এর মধ্যে ম্যাপিং করে থাকে। MapStruct এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল componentModel সেটিং, যা আপনাকে MapStruct Mapper এর সাথে বিভিন্ন ফ্রেমওয়ার্কে ইন্টিগ্রেট করার সুবিধা দেয়। এর মধ্যে একটি জনপ্রিয় ইন্টিগ্রেশন হল CDI (Contexts and Dependency Injection), যা Java EE বা Jakarta EE অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয়।

@Mapper(componentModel = "cdi") ব্যবহার করার মাধ্যমে, আপনি আপনার MapStruct Mapper ক্লাসটিকে CDI কম্পোনেন্ট হিসেবে ব্যবহার করতে পারবেন। এটি মূলত CDI কনটেইনারের মাধ্যমে MapStruct Mapper এর ইন্সট্যান্স তৈরি করে, যা injection এর মাধ্যমে অন্যান্য ক্লাসে ব্যবহার করা যায়।


১. CDI কি?

CDI (Contexts and Dependency Injection) হল Java EE বা Jakarta EE এর একটি বৈশিষ্ট্য, যা ডিপেনডেন্সি ইনজেকশন (DI) সমর্থন করে। এটি অবজেক্ট ইনস্ট্যান্স এবং তাদের জীবনচক্রকে পরিচালনা করার একটি পদ্ধতি প্রদান করে। CDI ফিচারটি MapStruct এর সাথে ব্যবহার করলে, আপনি MapStruct Mapper ক্লাসগুলোকে CDI Bean হিসেবে ব্যবহার করতে পারবেন এবং এটি আপনার প্রোজেক্টে সহজে ইনজেক্ট করা যাবে।


২. @Mapper(componentModel = "cdi") ব্যবহার কেন প্রয়োজন?

CDI ব্যবহারের মাধ্যমে, আপনি MapStruct Mapper কে সহজেই CDI Context থেকে ইনস্ট্যান্স হিসেবে ইনজেক্ট করতে পারবেন, যেমন অন্যান্য Spring বা JEE Beans। এটি ব্যবহারের মাধ্যমে, আপনি আপনার Mapper ক্লাসগুলিকে আপনার প্রোজেক্টের অংশ হিসেবে ব্যবহার করতে পারেন যেখানে dependency injection ব্যবহৃত হয়, এবং MapStruct এর ফিচারগুলো Spring Bean বা JEE Beans হিসেবে পাওয়ার সুবিধা পাবেন।


৩. @Mapper(componentModel = "cdi") এর ব্যবহার

@Mapper(componentModel = "cdi") একটি অ্যানোটেশন যা MapStruct মাপার ক্লাসটিকে CDI কনটেইনারের সাথে সম্পর্কিত করে। যখন এই কনফিগারেশন ব্যবহার করা হয়, তখন MapStruct স্বয়ংক্রিয়ভাবে CDI কনটেইনারের মাধ্যমে ম্যাপার ক্লাসের একটি ইনস্ট্যান্স তৈরি করবে এবং আপনি এটি @Inject ব্যবহার করে যেকোনো ক্লাসে ইনজেক্ট করতে পারবেন।

উদাহরণ: @Mapper(componentModel = "cdi") এর ব্যবহার

ধরা যাক, আমাদের দুটি ক্লাস Person এবং PersonDTO আছে, এবং আমরা MapStruct ব্যবহার করে এই দুই ক্লাসের মধ্যে ডেটা ট্রান্সফার করতে চাই।

Person.java:

public class Person {
    private String name;
    private int age;

    // Getters and Setters
}

PersonDTO.java:

public class PersonDTO {
    private String fullName;
    private int age;

    // Getters and Setters
}

এখন, MapStruct ব্যবহার করে আমরা Person কে PersonDTO তে ম্যাপ করতে চাই, এবং @Mapper(componentModel = "cdi") ব্যবহার করে এই Mapper কে CDI Bean হিসেবে কনফিগার করব।

PersonMapper.java:

import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

@Mapper(componentModel = "cdi")
public interface PersonMapper {
    PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);

    PersonDTO personToPersonDTO(Person person);
}

এখানে, componentModel = "cdi" এর মাধ্যমে PersonMapper কে CDI Bean হিসেবে তৈরি করা হচ্ছে।


৪. CDI Context থেকে Mapper ইনজেক্ট করা

এখন, আপনি CDI কনটেইনার ব্যবহার করে PersonMapper ক্লাসটিকে যেকোনো ক্লাসে ইনজেক্ট করতে পারেন। এখানে @Inject ব্যবহার করা হবে।

PersonService.java:

import javax.inject.Inject;

public class PersonService {

    @Inject
    PersonMapper personMapper;

    public PersonDTO convertToDTO(Person person) {
        return personMapper.personToPersonDTO(person);
    }
}

এখানে, @Inject অ্যানোটেশন ব্যবহার করে আমরা PersonMapper ক্লাসটিকে PersonService ক্লাসে ইনজেক্ট করেছি। CDI কনটেইনার স্বয়ংক্রিয়ভাবে PersonMapper এর একটি ইনস্ট্যান্স তৈরি করবে।


৫. MapStruct CDI Integration এর সুবিধা

  1. Dependency Injection: MapStruct Mapper CDI কনটেইনারের সাথে ইন্টিগ্রেট হলে, আপনি সহজেই MapStruct Mapper ক্লাসগুলিকে আপনার প্রোজেক্টে injected করতে পারেন। এতে কোড সহজ এবং পরিষ্কার থাকে।
  2. Loose Coupling: MapStruct Mapper ক্লাসগুলোকে CDI কনটেইনারের সাথে সংযুক্ত করার মাধ্যমে আপনার কোডে loose coupling সৃষ্টি হয়, যা বজায় রাখতে এবং পরীক্ষা (testing) করতে সুবিধাজনক হয়।
  3. Managed Beans: CDI কনটেইনার দ্বারা MapStruct Mapper Bean গুলি পরিচালিত হবে, যা আপনাকে ম্যাপারগুলির জন্য scoped lifecycle এবং dependency injection সুবিধা প্রদান করবে।
  4. Integration with Java EE: MapStruct এবং CDI একসাথে কাজ করলে Java EE অ্যাপ্লিকেশনের মধ্যে ম্যাপিং প্রক্রিয়া সহজ হয়।

৬. Spring এবং CDI এর মধ্যে পার্থক্য

এমনকি MapStruct এর componentModel = "spring" এবং componentModel = "cdi" একই উদ্দেশ্যে ব্যবহৃত হয়, তবে তাদের ব্যবহারের প্রসঙ্গ ভিন্ন। Spring ব্যবহারের ক্ষেত্রে Spring কনটেইনারের মাধ্যমে ডিপেনডেন্সি ইনজেকশন করা হয়, যেখানে CDI হল Java EE বা Jakarta EE ফ্রেমওয়ার্কের অংশ এবং এর মাধ্যমে ডিপেনডেন্সি ইনজেকশন করা হয়।


সারাংশ

MapStruct এর মাধ্যমে @Mapper(componentModel = "cdi") ব্যবহারের মাধ্যমে আপনি আপনার Mapper ক্লাসগুলিকে CDI কনটেইনারের অংশ হিসেবে ইন্টিগ্রেট করতে পারেন। এটি dependency injection ব্যবহারে সাহায্য করে, এবং আপনাকে MapStruct Mapper ক্লাসগুলিকে সহজে CDI Bean হিসেবে ইনজেক্ট করতে দেয়। এটি Java EE বা Jakarta EE অ্যাপ্লিকেশনগুলিতে ব্যবহার করা হয়, যেখানে CDI কনটেইনারের মাধ্যমে ম্যানেজ করা হয়।


Content added By
Promotion

Are you sure to start over?

Loading...